package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.dto.ProductDTO;
import com.zenithmind.mall.pojo.query.ProductQuery;
import com.zenithmind.mall.pojo.vo.ProductVO;

import java.util.List;

/**
 * 商品服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-06-09
 */
public interface ProductService {

    /**
     * 分页查询商品列表
     * 
     * @param query 查询条件
     * @return 商品列表
     */
    PageResult<ProductVO> getProductPage(ProductQuery query);

    /**
     * 根据ID查询商品详情
     * 
     * @param id 商品ID
     * @return 商品详情
     */
    ProductVO getProductById(String id);

    /**
     * 创建商品
     * 
     * @param productDTO 商品信息
     * @return 商品ID
     */
    String createProduct(ProductDTO productDTO);

    /**
     * 更新商品
     * 
     * @param id 商品ID
     * @param productDTO 商品信息
     * @return 更新结果
     */
    Boolean updateProduct(String id, ProductDTO productDTO);

    /**
     * 删除商品
     * 
     * @param id 商品ID
     * @return 删除结果
     */
    Boolean deleteProduct(String id);

    /**
     * 批量删除商品
     * 
     * @param ids 商品ID列表
     * @return 删除结果
     */
    Boolean deleteProducts(List<String> ids);

    /**
     * 上架商品
     * 
     * @param id 商品ID
     * @return 操作结果
     */
    Boolean onShelf(String id);

    /**
     * 下架商品
     *
     * @param id 商品ID
     * @return 操作结果
     */
    Boolean offShelf(String id);

    /**
     * 更新商品状态
     *
     * @param id 商品ID
     * @param status 状态
     * @return 操作结果
     */
    Boolean updateProductStatus(String id, String status);

    /**
     * 查询推荐商品
     * 
     * @param limit 限制数量
     * @return 推荐商品列表
     */
    List<ProductVO> getRecommendProducts(Integer limit);

    /**
     * 查询热销商品
     * 
     * @param limit 限制数量
     * @return 热销商品列表
     */
    List<ProductVO> getHotProducts(Integer limit);

    /**
     * 查询新品
     * 
     * @param limit 限制数量
     * @return 新品列表
     */
    List<ProductVO> getNewProducts(Integer limit);

    /**
     * 增加商品浏览量
     * 
     * @param id 商品ID
     */
    void increaseViewCount(String id);

    /**
     * 检查商品库存
     * 
     * @param id 商品ID
     * @param quantity 需要的数量
     * @return 库存是否充足
     */
    Boolean checkStock(String id, Integer quantity);

    /**
     * 减少商品库存
     * 
     * @param id 商品ID
     * @param quantity 减少数量
     * @return 操作结果
     */
    Boolean decreaseStock(String id, Integer quantity);

    /**
     * 增加商品库存
     * 
     * @param id 商品ID
     * @param quantity 增加数量
     * @return 操作结果
     */
    Boolean increaseStock(String id, Integer quantity);

    /**
     * 增加商品销量
     * 
     * @param id 商品ID
     * @param quantity 销售数量
     * @return 操作结果
     */
    Boolean increaseSalesCount(String id, Integer quantity);
}
